package com.jadyn.sqltest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


//处理查询结果集（遍历结果集。）

public class JDBCTest_Query {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try{
            //        1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //        2.获取连接
            conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
            //        3.获取数据库操作对象（statement专门执行sql语句）
            stmt = conn.createStatement();
            //        4.执行sql
            String sql = "select id,name from table1";
            //专门执行sql语句的方法
            rs = stmt.executeQuery(sql);
            //        5.处理查询结果集
            /* 这种是取特定行列的方式，为了取出所有行所以改进成下面的while()
            boolean flag1 = rs.next();
            //    System.out.println(flag1);
            if(flag1){
                //光标指向的行有数据
                //  取数据
                //  getString()方法的特点是：不管数据库中的数据类型是什么，都以Sting的形式取出
                //   JDBC中所有下标从1开始，不是从0开始
                String id = rs.getString(1);
                String name = rs.getString(2);
                System.out.println(id + "," + name);
            }
            flag1 = rs.next();
            if (flag1){
                //  以下1，2说的是第几列
                String id = rs.getString(1);
                String name = rs.getString(2);
                System.out.println(id + "," + name);
            }
            */

            // rs.next()返回true，则表示有数据；false表示无数据
            while (rs.next()){
                /*
                String id = rs.getString(1);
                String name = rs.getString(2);
                System.out.println(id + "," + name);
                 */

            // 这个不是以列的下标获取，以列的名字获取
                /*
                String id = rs.getString("id");
                String name = rs.getString("name");
                System.out.println(id + "," + name);
                 */

            //  除了可以以String类型取出之外，还可以以特定的数据类型取出
                int id = rs.getInt("id");
                String name = rs.getString("name");
            //  double sal = rs.getDouble("salary");
                System.out.println(id + "," + name);

            }

        }catch(Exception e){
            e.printStackTrace();
        }finally {
            //6.释放资源
            if (rs != null){
                try{
                    rs.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
            if (stmt != null){
                try {
                    stmt.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

